// 在 Cloud code 里初始化 Express 框架
var express = require('express');
var fs = require('fs');
//var events = require('events');
//var emitter = new events.EventEmitter();
var app = express();
var avosExpressCookieSession = require('avos-express-cookie-session');
var Post = AV.Object.extend("Post");

// App 全局配置
app.set('views','cloud/views');   // 设置模板目录
app.set('view engine', 'ejs');    // 设置 template 引擎
app.use(express.bodyParser());    // 读取请求 body 的中间件

// 启用 cookieParser
app.use(express.cookieParser('community'));
// 使用 avos-express-cookie-session 记录登录信息到 cookie
app.use(avosExpressCookieSession({ cookie: { maxAge: 3600000 }, fetchUser: true}));

// 根目录
app.get('/', function(req, res) {
    // 判断用户是否已经登录
    if (req.AV.user) {
      // 如果已经登录，跳转到控制页面
      res.redirect('/control');
    } else {
      // 没有登录，跳转到登录页面。
      res.redirect('/login');
    }
});

// 使用 Express 路由 API 服务 /hello 的 HTTP GET 请求
app.get('/hello', function(req, res) {
    res.render('hello', 'hello');
});


app.get('/login', function(req, res) {
    // 渲染登录页面
    res.render('login.ejs');
});
// 点击登录页面的提交将出发下列函数
app.post('/login', function(req, res) {
  if(req.body.username == 'admin'){
    AV.User.logIn(req.body.username, req.body.password).then(function() {
      //登录成功，avosExpressCookieSession会自动将登录用户信息存储到cookie
      //跳转到profile页面。
      console.log('signin successfully: %j', req.AV.user);
      res.redirect('/control');
    },function(error) {
      //登录失败，跳转到登录页面
      res.redirect('/login');
    });
  }else{
    //登录失败，跳转到登录页面
    res.redirect('/login');
  }
});
// 删除信息
app.get('/del', function(req, res) {
  // 判断用户是否已经登录
  if (req.AV.user) {
    // 如果已经登录，做下一步
  } else {
    // 没有登录，跳转到登录页面。
    res.redirect('/login');
  }
  var id = req.param('id');
  var query = new AV.Query(Post);
  query.equalTo('objectId', id);

  query.destroyAll().then(function() {
    res.redirect('/control?p=man');
  });

});

//信息发布后台
app.get('/control', function(req, res) {
    // 判断用户是否已经登录
    if (req.AV.user) {
      // 如果已经登录执行下一步
    } else {
      // 没有登录，跳转到登录页面。
      res.redirect('/login');
    }

    // 渲染控制面板
    var view = req.param('p');
    var act = req.param('act');
    var name = req.AV.user.get('username');

    if(act == 'post_error'){
      res.render('control.ejs', { name:  name, view: view, alert: "danger", alert_title: "错误！", alert_content: "请重新上传图片"});
    }else if(act == 'post_success'){
      res.render('control.ejs', { name:  name, view: view, alert: "success", alert_title: "成功", alert_content: "发布数据"});
    }else {
      if(view == 'man'){
        var query = new AV.Query(Post);
        query.greaterThan('category', 1);

        query.find({
          success: function(results){
            res.render('control.ejs', { name:  name, view: view, results: results});
          },
          error: function(error){
            res.render('control.ejs', { name:  name, view: view, error: error});
          }
        });
      }else if(view == 'bbs') {
        var query = new AV.Query(Post);
        query.equalTo('category', 1);

        query.find({
          success: function(results){
            res.render('control.ejs', { name:  name, view: view, results: results});
          },
          error: function(error){
            res.render('control.ejs', { name:  name, view: view, error: error});
          }
        });
      }else {
        res.render('control.ejs', { name:  name, view: view});
      }
    }
});

//查看用户profile信息
app.get('/profile', function(req, res) {
    // 判断用户是否已经登录
    if (req.AV.user) {
      // 如果已经登录，发送当前登录用户信息。
      res.send(req.AV.user);
    } else {
      // 没有登录，跳转到登录页面。
      res.redirect('/login');
    }
});

//调用此url来登出帐号
app.get('/logout', function(req, res) {
  //avosExpressCookieSession将自动清除登录cookie信息
    AV.User.logOut();
    res.redirect('/profile');
});

//发布信息
app.post('/post', function(req, res){
  // 判断用户是否已经登录
  if (req.AV.user) {
    // 如果已经登录，做下一步
  } else {
    // 没有登录，跳转到登录页面。
    res.redirect('/login');
  }
  var iconFile = req.files.iconImage;
  var user = req.AV.user;
  var title = req.body.title;
  var content = req.body.content;
  var category = req.body.category;
  var post = new Post();

  post.set('title', title);
  post.set('content', content);
  post.set('category', parseInt(category));
  post.set('from', user);

  if(iconFile.name != ''){
    fs.readFile(iconFile.path, function(err, data){
      if(err){
        res.redirect('/control?act=post_error&p=post');
      }else{
        var base64Data = data.toString('base64');
        var theFile = new AV.File(iconFile.name, {base64: base64Data});
        post.set('drawing', theFile);

        post.save().then(function(post){
          res.redirect('/control?act=post_success&p=post');
        });
      }
    });
  }else{
    post.save().then(function(post){
      res.redirect('/control?act=post_success&p=post');
    });
  }
});

// 获取发布者姓名
app.get('/getUsername', function(req, res) {
  // 判断用户是否已经登录
  if (req.AV.user) {
    // 如果已经登录，做下一步
    var query = new AV.Query(AV.User);
    query.equalTo('objectId', req.param('id'));
    query.first().then(function(user) {
      res.send(user.get('username'));
    });
  } else {
    // 没有登录，打印错误信息
    res.send('error');
  }
});

// 获取文章内容
app.get('/getContent', function(req, res) {
  // 判断用户是否已经登录
  if (req.AV.user) {
    // 如果已经登录，做下一步
    var query = new AV.Query(Post);
    query.equalTo('objectId', req.param('id'));
    query.first().then(function(user) {
      res.send(user.get('content'));
    });
  } else {
    // 没有登录，打印错误信息
    res.send('error');
  }
});

// 获取文章内容
app.get('/getTitle', function(req, res) {
  // 判断用户是否已经登录
  if (req.AV.user) {
    // 如果已经登录，做下一步
    var query = new AV.Query(Post);
    query.equalTo('objectId', req.param('id'));
    query.first().then(function(user) {
      res.send(user.get('title'));
    });
  } else {
    // 没有登录，打印错误信息
    res.send('error');
  }
});

// 最后，必须有这行代码来使 express 响应 HTTP 请求
app.listen();

app.use(function(req, res, next){
  res.status(404).render('404', {title: 'Sorry, page not found'});
});
